proc namespace {name} {
	global stack_ends
	global stack_namespace
	global NAMESPACE
	
	push stack_namespace $NAMESPACE
	
	if {$NAMESPACE!=""} {
		set NAMESPACE $NAMESPACE.$name
	} {
		set NAMESPACE $name
	}
	push stack_ends [info body end]
	proc end {} [info body namespace_end]
}

proc namespace_end {} {
	global stack_ends
	global stack_namespace
	global NAMESPACE

	set NAMESPACE [pop $stack_namespace]
	proc end {} [pop $stack_ends]
}